iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
0
Software Development

從Java進入AWS部署RESTful API的心路歷程系列 第 29

Day29-實作(九)時間序列資料-定義

  • 分享至 

  • xImage
  •  

接下來的資料結構時做都需要主索引為partition key&sort key,所以先建立一個單純的資料表進行操作。

var params = {
    "TableName": "table2",
    KeySchema: [
        {
            AttributeName: "pk",
            KeyType: "HASH"
        },
        {
            AttributeName: "sk",
            KeyType: " RANGE"
        }
    ],
    AttributeDefinitions: [
        {
            AttributeName: "pk",
            AttributeType: "S"
        },
        {
            AttributeName: "sk",
            AttributeType: "S"
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1
    }
};

dynamodb.createTable(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
 });

BaseTimeBean

因為我打算在同一個資料表存不同類的項目資料,所以先準備個父類別定義核心的主索引部分

@DynamoDBTable(tableName = "table2")
public class BaseTimeBean {

    @JsonIgnore
    @DynamoDBHashKey(attributeName = "pk")
    private String pk;
    
    @JsonIgnore
    @DynamoDBRangeKey(attributeName = "sk")
    @DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.CREATE)
    private Date sk;
    
    public String getPk() {
        return pk;
    }
    
    public void setPk(String pk) {
        this.pk = pk;
    }
    
    @JsonGetter("datetime")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss")
    public Date getSk() {
        return sk;
    }
    
    public void setSk(Datesk) {
        this.sk = sk;
    }
}

你會注意到,在Java的Date,在DynamoDB對應的attribute type是string,Date 值會以 ISO-8601 格式字串存放。而且時間序列資料原則上我們只會新增項目,所以sk可以很乾脆的直接使用generated。

另外一方面,API當中我們只希望date在response當中出現,所以僅使用Getter註釋。

Message bean

新增一個子類繼承BaseTimeBean

public class Message extends BaseTimeBean {
    
    @DynamoDBIgnore
    public String getCatalog() {
        return this.getPk();
    }
    
    @DynamoDBIgnore
    public void setCatalog(String catalog) {
        this.setPk(catalog);
    }
    
    private String topic;
    
    private String message;
    
    public String getTopic() {
        return topic;
    }
    
    public void setTopic(String topic) {
        this.topic = topic;
    }
    
    public String getMessage() {
        return message;
    }
    
    public void setMessage(String message) {
        this.message = message;
    }
}

這邊要注意的是,因為註釋可以繼承,不需要再註釋tablename。而catalog是在message意義上的pk,所以用新的get/set替代。


上一篇
Day28-概論(十五)含版本編號的樂觀鎖定
下一篇
Day29-實作(九)時間序列資料-操作
系列文
從Java進入AWS部署RESTful API的心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言